package com.git.contractmanagement.service;

import cn.dev33.satoken.stp.StpUtil;
import org.springframework.stereotype.Service;

import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 在线用户统计服务
 * 使用内存存储而非Redis
 */
@Service
public class OnlineUserService {
    
    // 使用内存存储在线用户信息
    private static final ConcurrentHashMap<Long, Long> ONLINE_USERS = new ConcurrentHashMap<>();
    
    /**
     * 用户登录时添加到在线用户列表
     * @param userId 用户ID
     */
    public void addUser(Long userId) {
        ONLINE_USERS.put(userId, System.currentTimeMillis());
    }
    
    /**
     * 用户登出时从在线用户列表移除
     * @param userId 用户ID
     */
    public void removeUser(Long userId) {
        ONLINE_USERS.remove(userId);
    }
    
    /**
     * 获取在线用户数量
     * @return 在线用户数
     */
    public int getOnlineUserCount() {
        // 清理过期的用户信息（假设超过1小时无活动算作离线）
        long oneHourAgo = System.currentTimeMillis() - 3600000;
        ONLINE_USERS.entrySet().removeIf(entry -> entry.getValue() < oneHourAgo);
        
        return ONLINE_USERS.size();
    }
    
    /**
     * 获取所有在线用户ID列表
     * @return 在线用户ID集合
     */
    public Set<Long> getOnlineUserIds() {
        // 清理过期的用户信息
        long oneHourAgo = System.currentTimeMillis() - 3600000;
        ONLINE_USERS.entrySet().removeIf(entry -> entry.getValue() < oneHourAgo);
        
        return ONLINE_USERS.keySet();
    }
}